L,M,N=map(int,input().split())
D=[]
for i in range(N):
    D.append(int(input()))

# 假设最短跳跃距离为x,移除的岩石数量不超过M，就合法
def check(x):
    # cnt表示移除岩石的数量
    cnt=0
    # last_idx表示上一个位置
    last_idx=0
    for i in range(N):
        if D[i]-last_idx>=x:
            last_idx=D[i]
        else:
            cnt+=1
    # 最后一步特判
    if L-last_idx<x:
        return False
    return cnt<=M

left,right=1,L
ans=-1

while left<=right:
    mid=(left+right)//2
    if check(mid):
        ans=mid
        left=mid+1
    else:
        right=mid-1
print(ans)